<?php

namespace MoChat\App\Client\Service;

use MoChat\App\Client\Contract\ClientTagContract;
use MoChat\App\Client\Model\ClientTag;
use MoChat\Framework\Service\AbstractService;

class ClientTagService extends AbstractService implements ClientTagContract
{
    /**
     * @var ClientTag
     */
    protected $model;

    /**
     * 添加多条
     * @param array $data 添加的数据
     * @return bool 执行结果
     */
    public function createWorkContactTags(array $data): bool
    {
        return $this->model->createAll($data);
    }

    /**
     * 查询分组标签数量.
     */
    public function countWorkContactTagByGroupId(int $groupId): int
    {
        return $this->model::query()->where('client_tag_group_id', $groupId)->count();
    }

    /**
     * 查询单条 - 根据群组id和标签名称.
     * @param int $groupId 群组id
     * @param string $name 标签名称
     * @param array $columns 查询字段
     * @return array 返回值
     */
    public function getWorkContactTagByGroupIdName(int $groupId, string $name, array $columns = ['*']): array
    {
        $res = $this->model::query()
            ->where('client_tag_group_id', $groupId)
            ->where('name', $name)
            ->first($columns);
        if (empty($res)) {
            return [];
        }

        return $res->toArray();
    }

    /**
     * 查询多条 - 根据ID.
     * @param array $ids ID
     * @param array|string[] $columns 查询字段
     * @return array 数组
     */
    public function getClientTagsById(array $ids, array $columns = ['*']): array
    {
        return $this->model->getAllById($ids, $columns);
    }

    /**
     * 删除 - 多条
     * @param array $ids 删除ID
     * @return int 删除条数
     */
    public function deleteWorkContactTags(array $ids): int
    {
        return $this->model->deleteAll($ids);
    }

    /**
     * 修改单条 - 根据ID.
     * @param int $id id
     * @param array $data 修改数据
     * @return int 修改条数
     */
    public function updateWorkContactTagById(int $id, array $data): int
    {
        return $this->model->updateOneById($id, $data);
    }

    /**
     * 查询多条 - 根据标签名称.
     * @param int $corpId 企业id
     * @param string $name 标签名称
     * @param array|string[] $columns
     */
    public function getWorkContactTagsByCorpIdName(int $corpId, string $name, array $columns = ['*']): array
    {
        $res = $this->model::query()
            ->where('corp_id', $corpId)
            ->where('name', $name)
            ->get($columns);

        if (empty($res)) {
            return [];
        }

        return $res->toArray();
    }


    /**
     * 查询多条 - 根据分组id.
     * @param array|string[] $columns 查询字段
     * @return array 数组
     */
    public function getWorkContactTagsByGroupIds(array $groupId, array $columns = ['*']): array
    {
        $res = $this->model::query()
            ->whereIn('client_tag_group_id', $groupId)
            ->orderByRaw('`order` asc,`id` desc')
            ->get($columns);

        if (empty($res)) {
            return [];
        }

        return $res->toArray();
    }

    public function getAllClientTagByIds($ids, array $filed = ['*']): array
    {
       return $this->model->getAllById($ids,$filed);
    }

    /**
     * 查询多条 - 根据ID.
     * @param array $ids ID
     * @param array|string[] $columns 查询字段
     * @return array 数组
     */
    public function getWorkContactTagsById(array $ids, array $columns = ['*']): array
    {
        return $this->model->getAllById($ids, $columns);
    }

    /**
     * 查询多条 - 根据多个标签名称和分组id.
     * @param array $names 标签名称
     * @param int $groupId 分组id
     * @param array $columns 查询字段
     * @return array 数组
     */
    public function getWorkContactTagsByNamesGroupId(array $names, $groupId, array $columns = ['*']): array
    {
        $res = $this->model::query()
            ->whereIn('name', $names)
            ->where('client_tag_group_id', $groupId)
            ->get($columns);

        if (empty($res)) {
            return [];
        }

        return $res->toArray();
    }

}